#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QMenuBar>
#include <QDesktopWidget>
#include <QApplication>
#include <QDockWidget>
#include <QToolBar>
#include <config.h>
#include <view/about_dialog.h>
#include <QSplitter>
#include <QTextEdit>
#include <view/session_manage_tree_widget.h>
#include <view/shelldockwidget.h>
#include "utils.h"

class MainWindow : public QMainWindow
{
    Q_OBJECT
private:
    // 界面布局相关
    QHBoxLayout *m_mainLayout;

    // 菜单相关
    QMenuBar *m_mainMenuBar;

    QMenu* m_fileMenu;        // 文件菜单
    QMenu* m_editMenu;        // 编辑菜单
    QMenu* m_viewMenu;        // 视图菜单
    QMenu* m_optionMenu;      // 操作菜单
    QMenu* m_windowsMenu;     // 窗口菜单
    QMenu* m_helpMenu;        // 帮助菜单

   // QAction *openFileAction;
    QAction *m_connetAction;                // 文件 -> 链接
    QAction *m_quickConnectAction;          // 文件 -> 快速链接
    QAction *m_reconnetAction;              // 文件 -> 再次链接
    QAction *m_disconnetAction;             // 文件 -> 再次链接
    QAction *m_cloneSessionAction;          // 文件 -> 克隆链接
    QAction *m_connectSftpSessionAction;    // 文件 -> 以sftp链接
    QAction *m_exitAction;                  // 程序退出

    // 编辑相关
    QAction *m_copyAction;                  // 复制
    QAction *m_pasteAction;                 // 粘贴
    QAction *m_copyAndPasteAction;          // 复制并且粘贴
    QAction *m_clearScreenAction;           // 清理回话
    QAction *m_clearScollbackAction;        // 清理屏幕
    QAction *m_resetAction;

    // 视图相关
    QAction *m_menuBarViewAction;               // 菜单栏
    QAction *m_toolBarViewAction;               // 工具兰
    QAction *m_sessionTabsViewAction;           //
    QAction *m_commandWindowViewAction;         // 命令窗口
    QAction *m_statusBarViewAction;             // 状态栏
    QAction *m_sessionManagerViewAction;        //
    QAction *m_zoomViewAction;                  // 放大或者缩小

    // 操作相关
    QAction *m_sessionOptionsAction;
    QAction *m_EditDefaultSessionOptionsAction;
    QAction *m_GlableOptionsAction;
    QAction *m_AutoSaveOptionsAction;

     // 窗口
//    QAction *sessionOptionsAction;
//    QAction *EditDefaultSessionOptionsAction;
//    QAction *GlableOptionsAction;
//    QAction *AutoSaveOptionsAction;
      // 帮助
      QAction *m_updateNowHelpAction;               // 升级
      QAction *m_checkForUpdateHelpAction;          // 检查升级
      QAction *m_aboutHelpAction;                   // 关于我们
private:
      // 工具栏
      QToolBar *m_toolBar;
      QAction *m_actionConnect;                     // 快速链接操作
      QAction *m_actionDisonnect;                   // 断开链接操作
      QAction *m_actionReonnect;                    // 重新链接操作
      QAction *m_actionCopy;                        // 复制链接操作
      QAction *m_actionPaste;                       // 粘贴浍话操作

private:
      sessionManageTreeView *m_seeionTreeView;      // 树形结构的绘画管理
      CShellDockWidget *m_shellDockwidget;
public:
    MainWindow(QWidget *parent = 0);
    void initView();        // 初始化主界面
    void initMainWindow();  // 初始化主窗口

    void initMenuBar();         // 初始化菜单栏
    void initFileMenu();        // 初始文件
    void initEditMenu();        // 初始化编辑菜单
    void initViewMenu();
    void initOptionMenu();
    void initWindowMenu();
    void initHelpMenu();

    void initToolBar();     // 初始化工具栏

    void initSessionManageTreeView();
    void initShellWidget();

    ~MainWindow();
public:
    void showAboutDialog();
    void onStatusBarViewAction();
    void onConnetAction();                // 文件 -> 链接
    void onQuickConnectAction();          // 文件 -> 快速链接
    void onReconnetAction();              // 文件 -> 再次链接
    void onDisconnetAction();             // 文件 -> 再次链接
    void onCloneSessionAction();          // 文件 -> 克隆链接
    void onConnectSftpSessionAction();    // 文件 -> 以sftp链接
    void onExitAction();                  // 程序退出

    // 编辑相关
    void onCopyAction();                  // 复制
    void onPasteAction();                 // 粘贴
    void onCopyAndPasteAction();          // 复制并且粘贴
    void onClearScreenAction();           // 清理回话
    void onClearScollbackAction();        // 清理屏幕
    void onResetAction();

    // 视图相关
    void onMenuBarViewAction();               // 菜单栏
    void onToolBarViewAction();               // 工具兰
    void onSessionTabsViewAction();           //
    void onCommandWindowViewAction();         // 命令窗口
   // void onStatusBarViewAction();             // 状态栏
    void onSessionManagerViewAction();        //
    void onZoomViewAction();                  // 放大或者缩小

    // 操作相关
    void onSessionOptionsAction();
    void onEditDefaultSessionOptionsAction();
    void onGlableOptionsAction();
    void onAutoSaveOptionsAction();

     // 帮助
     void onUpdateNowHelpAction();               // 升级
     void onCheckForUpdateHelpAction();          // 检查升级

public slots:

    void slotShowAboutDialog();             // 打开数据
    void slotStatusBarViewAction();
    void slotConnetAction();                // 文件 -> 链接
    void slotQuickConnectAction();          // 文件 -> 快速链接
    void slotReconnetAction();              // 文件 -> 再次链接
    void slotDisconnetAction();             // 文件 -> 再次链接
    void slotCloneSessionAction();          // 文件 -> 克隆链接
    void slotConnectSftpSessionAction();    // 文件 -> 以sftp链接
    void slotExitAction();                  // 程序退出

    // 编辑相关
    void slotCopyAction();                  // 复制
    void slotPasteAction();                 // 粘贴
    void slotCopyAndPasteAction();          // 复制并且粘贴
    void slotClearScreenAction();           // 清理回话
    void slotClearScollbackAction();        // 清理屏幕
    void slotResetAction();

    // 视图相关
    void slotMenuBarViewAction();               // 菜单栏
    void slotToolBarViewAction();               // 工具兰
    void slotSessionTabsViewAction();           //
    void slotCommandWindowViewAction();         // 命令窗口
   // void slotStatusBarViewAction();             // 状态栏
    void slotSessionManagerViewAction();        //
    void slotZoomViewAction();                  // 放大或者缩小

    // 操作相关
    void slotSessionOptionsAction();
    void slotEditDefaultSessionOptionsAction();
    void slotGlableOptionsAction();
    void slotAutoSaveOptionsAction();

     // 帮助
     void slotUpdateNowHelpAction();               // 升级
     void slotCheckForUpdateHelpAction();          // 检查升级


};



#endif // MAINWINDOW_H
